package com.yl.module.base.controller;

import com.yl.module.base.model.R;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.ObjectError;

import java.util.List;

/**
 * @Todo
 * @Author jiangtao
 * @CreateBy 2020-01-14 2:33 PM
 * @UpdateBy jiangtao
 * @Version v1.0
 */
@Slf4j
public class BaseController {

    private static final int ERROR_CODE = 500;

    private static final int SUCCESS_CODE = 200;

    /**
     * 返回错误信息 默认代码 1
     * @return
     */
    public R error(String message) {
        return R.builder()
                .code(ERROR_CODE)
                .message(StringUtils.isEmpty(message) ? "操作失败" : message)
                .build();
    }
    /**
     * 返回错误信息
     * @param code
     * @param message
     * @return JSONResult
     */
    public R error(int code, String message) {
        return R.builder().code(code).message(message).build();
    }
    /**
     * 返回错误信息
     * @param code
     * @param throwable （子类 Error Exception）
     * @return JSONResult
     */
    public R error(int code, Throwable throwable) {
        return R.builder().code(code).message(throwable.getMessage()).build();
    }
    /**
     * 返回错误信息
     * @param code
     * @param message
     * @param url
     * @return
     */
    public R error(int code, String message, Object data, String url) {
        return R.builder().code(code).message(message).data(data).redirectUrl(url).build();
    }

    /**
     * 成功返回
     * @return
     */
    public R success() {
        return success("success");
    }
    /**
     * 成功返回
     * @param message
     * @return
     */
    public R success(String message) {
        return R.builder()
                .code(SUCCESS_CODE)
                .message(StringUtils.isEmpty(message) ? "success" : message)
                .build();
    }
    /**
     * 成功返回
     * @param message
     * @param data
     * @return
     */
    public R success(String message, Object data, String url) {
        return R.builder()
                .code(SUCCESS_CODE)
                .message(StringUtils.isEmpty(message) ? "success" : message)
                .data(data)
                .redirectUrl(url)
                .build();
    }


    /**
     * 表单验证，错误信息处理
     * @param errors
     * @return
     */
    public String handleValidatedError(List<ObjectError> errors) {
        StringBuffer sb = new StringBuffer();
        for (ObjectError e : errors) {
            sb.append("; " + e.getCode());
            sb.append(":message:" + e.getDefaultMessage());
        }
        return sb.toString().length() > 0 ? sb.toString().substring(1) : "";
    }
}
